let range = {
    from: 1,
    to: 5,
};

// 本实现中，range和可迭代对象实现了分离，range自身没有next()方法，是通过调用range[Symbol.iterator]创建了另一个对象，即所谓的“迭代器”对象
// 并且，它的next()方法会为迭代生成值
// 因此，迭代器对象和被迭代的对象是分开的

range[Symbol.iterator] = function() {
    return {
        current: this.from,
        last: this.to,

        next() {
            if (this.current <= this.last) {
                return {done: false, value: this.current++};
            }else {
                return {done: true};
            }
        }
    };
};

for (let num of range) {
    alert(num);
}